﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common;

namespace Entidades.jSON
{
    public class PagoInfo
    {
        #region Constructores
        
        /// <summary>
        /// Constructor por default
        /// </summary>
        /// <param name="guion"></param>
        public PagoInfo()
        {
        }

        /// <summary>
        /// Construye un objeto GuionInfo a partir de un Guion
        /// </summary>
        /// <param name="guion"></param>
        public PagoInfo(Pago pago)
        {
            this.Id                         = pago.Id;
            this.Fecha                      = pago.Fecha;
            this.FechaPago                  = pago.FechaPago;
            this.GuionTitulo                = pago.Guion.IsNotNull() ? pago.Guion.Titulo : string.Empty;
            this.GuionEpisodio              = pago.Guion.IsNotNull() ? pago.Guion.Episodio : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdEstado                   = pago.Estado.IsNotNull() ? pago.Estado.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdGuion                    = pago.Guion.IsNotNull() ? pago.Guion.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdMedioPago                = pago.MedioPago.IsNotNull() ? pago.MedioPago.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdProveedor                = pago.Proveedor.IsNotNull() ? pago.Proveedor.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdProveedorRol             = pago.ProveedorRol.IsNotNull() ? pago.ProveedorRol.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.ProveedorRol               = pago.ProveedorRol.IsNotNull() ? pago.ProveedorRol.Nombre : string.Empty;
            this.IdProveedorTipoDocumento   = pago.Proveedor.IsNotNull() && pago.Proveedor.TipoDocumento.IsNotNull() ? pago.Proveedor.TipoDocumento.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.ProveedorNroDocumento      = pago.Proveedor.IsNotNull() ? pago.Proveedor.NroDocumento : string.Empty;
            this.Canciones                  = pago.Canciones;
            this.ImporteCanciones           = pago.ImporteCanciones;
            this.ImporteTotal               = pago.ImporteTotal;
            this.Loops                      = pago.Loops;
        }

        #endregion

        #region Propiedades

        /// <summary>
        /// Id (PK)
        /// </summary>
        public virtual int Id { get; set; }

        /// <summary>
        /// Id del Guion
        /// </summary>
        public virtual int IdGuion { get; set; }

        /// <summary>
        /// Título del Guión
        /// </summary>
        public virtual string GuionTitulo { get; set; }

        /// <summary>
        /// Episodio del Guión
        /// </summary>
        public virtual int? GuionEpisodio { get; set; }

        /// <summary>
        /// Id del Estado del Pago
        /// </summary>
        public virtual int IdEstado { get; set; }

        /// <summary>
        /// Id del Proveedor
        /// </summary>
        public virtual int IdProveedor { get; set; }

        /// <summary>
        /// Id del Rol del Proveedor en el Guión
        /// </summary>
        public virtual int IdProveedorRol { get; set; }

        /// <summary>
        /// Rol del Proveedor en el Guión
        /// </summary>
        public virtual string ProveedorRol { get; set; }

        /// <summary>
        /// Número de Documento del Proveedor
        /// </summary>
        public virtual string ProveedorNroDocumento { get; set; }

        /// <summary>
        /// Id del Tipo de Documento del Proveedor
        /// </summary>
        public virtual int IdProveedorTipoDocumento { get; set; }
        
        /// <summary>
        /// Fecha
        /// </summary> 
        public virtual DateTime Fecha { get; set; }

        /// <summary>
        /// Cantidad de Loops
        /// </summary>
        public virtual int Loops { get; set; }

        /// <summary>
        /// Cantidad de Canciones
        /// </summary>
        public virtual int Canciones { get; set; }

        /// <summary>
        /// Importe
        /// </summary>
        public virtual decimal ImporteCanciones { get; set; }

        /// <summary>
        /// Importe
        /// </summary>
        public virtual decimal ImporteTotal { get; set; }

        /// <summary>
        /// Fecha de Pago
        /// </summary>
        public virtual DateTime? FechaPago { get; set; }

        /// <summary>
        /// Id del Medio de Pago
        /// </summary>
        public virtual int IdMedioPago { get; set; }

        #endregion
    }
}
